package kr.co.cherryt.parser.xml;

import java.util.ArrayList;

import android.content.Context;
import android.os.Handler;
import kr.co.cherryt.common.Utility;

public class XmlParserCore {

	private static String findElemenDatatAtXmlItem(XmlItem item, String szElementName){
		
		if(item != null){
			String szData = item.getXmlElementData(szElementName);
			return szData;
		}

		return null;
	}


	
	// XmlItem Array에서 원하는 Data를 찾는다.
	public static String getXmlItemElementData(XmlManager xmlManager, int nItemIdx, String szElementName){

		
		if(xmlManager != null){
			ArrayList<XmlItem> arXmlItems = xmlManager.getXmlItemArrayList();
		
			if(arXmlItems != null && arXmlItems.size() > nItemIdx){
				//!= null ||  xmlManager.getXmlItemArrayList().size() > nItemIdx){
				
				XmlItem item = arXmlItems.get(nItemIdx);

				return findElemenDatatAtXmlItem(item, szElementName);
				
			}
				
		}
		return null;
	}
	

	
	
	/**
	 * XmlManager에서 XmlItem을 반환한다
	 * @param xmlManager : 대상이되는 XmlManager
	 * @param nItemIdx : Array Index
	 * @return : Index에 해당되는 XmlItem 객체
	 */
	public static XmlItem getXmlItem(XmlManager xmlManager, int nItemIdx){

		if(xmlManager != null){
			ArrayList<XmlItem> arXmlItems = xmlManager.getXmlItemArrayList();

			if(arXmlItems != null && arXmlItems.size() > nItemIdx){
				return arXmlItems.get(nItemIdx);
			}			
		}
		return null;
	}
	
	
	
	/**
	 * XmlItem에 Object를 저장
	 * @param xmlManager : 대상이되는 XmlManager
	 * @param nItemIdx : Array Index
	 * @param objTag : 설정 할 Object
	 * @return : 성공 실패
	 */
	public static boolean setXmlItemElementTagEx(XmlManager xmlManager, int nItemIdx, Object objTag){

		XmlItem xmlItem = getXmlItem(xmlManager, nItemIdx);
		
		if(xmlItem != null){
			xmlItem.setTagEx(objTag);
			return true;
		}
		return false;
		
	}

	
	
	/**
	 * XmlManager에 저장된 Object를 반환한다
	 * @param xmlManager : 대상이 되는 XmlManager
	 * @param nItemIdx : 대상 Index
	 * @return : 저장된 Object, 없는 경우 null 
	 */
	public static Object getXmlItemElementTagEx(XmlManager xmlManager, int nItemIdx){

		XmlItem xmlItem = getXmlItem(xmlManager, nItemIdx);
		
		if(xmlItem != null){
			return xmlItem.getTagEx();
		}
		return null;
		
	}

	
	
	
	
	// XML에 포함된 성공 여부를 리턴한다.
	public static boolean isXmlResultOk(XmlManager xmlManager){
	
		String szRetCode = getXmlResultCode(xmlManager);
		
		// resultCode가 "0"이면 성공 한거다!! (int로 변환해서 0과 비교하지는 말자!! < 쓰레기 값도 0이 될 수 있다>
		if( Utility.IsEmpty(szRetCode) == false && szRetCode.equals("0")){
			return true;
		}
		return false;
		
	}

	// 
	public static int getXmlTotalCnt(XmlManager xmlManager){
		
		if(xmlManager == null){
			return 0;
		}
		
		String szTotalItem = getXmlElementData(xmlManager, "total_cnt");
		if(Utility.IsEmpty(szTotalItem)){
			return 0;
		}
		
		return Utility.parseInt(szTotalItem);
	}
	
	public static int getXmlUseCnt(XmlManager xmlManager){
		
		if(xmlManager == null){
			return 0;
		}
		
		String szUseItem = getXmlElementData(xmlManager, "use_cnt");
		if(Utility.IsEmpty(szUseItem)){
			return 0;
		}
		
		return Utility.parseInt(szUseItem);
	}

	// XML에 포함된 결과 메세지를 리턴한다.
	public static String getXmlResultMessage(XmlManager xmlManager){

		return getXmlElementData(xmlManager, "resultMsg");
	}

	
	// XML에 포함된 결과 코드를 리턴한다.
	public static String getXmlResultCode(XmlManager xmlManager){
		
		String szRetCode = getXmlElementData(xmlManager, "resultCode");
		return szRetCode;
	}	
	
	
	// XmlItem 에서 원하는 Data를 찾는다.
	public static String getXmlElementData(XmlManager xmlManager, String szElementName){

		
		if(xmlManager != null){

			XmlItem item = xmlManager.getXmlItemList();
			
			return findElemenDatatAtXmlItem(item, szElementName);
		}
		return null;
	}
	
	
	// getXmlElementData의 null default Value 버전
	public static String getXmlElementData(XmlManager xmlManager, String szElementName, String szNullDefVaue){
		String szRet = 	getXmlElementData(xmlManager, szElementName);
		
		if(szRet == null){
			return szNullDefVaue;
		}
		
		return szRet;
	}
	
	public boolean fillItemArrayAsync(XmlManager xmlManager, String szUrl, Handler h, Context c){
		return xmlManager.fillItemArrayAsync(szUrl, h, c);
	}
	
	
	
	
	
	/**
     * 비동기 파싱의 결과를 전달하기 위한 Listener
     */
    public ParserInterfaceListener m_parserInterfaceListener;
    
    public void setParserInterfaceListener(ParserInterfaceListener l){
    	m_parserInterfaceListener = l;
    }
    
	public interface ParserInterfaceListener { 	
		public void onAsyncResult(int nErrcode, XmlParserCore obj);
	}
}
